//package com.strong.faker;
//
//import cn.hutool.core.util.ArrayUtil;
//import cn.hutool.core.util.RandomUtil;
//import cn.hutool.core.util.StrUtil;
//import com.strong.enum_.ProvinceEnum;
//import lombok.Getter;
//
//import java.util.Arrays;
//
///**
// * 车牌 模拟数据生成类
// *
// * @author Administrator
// * @date 2023/04/08
// */
//public class LicencePlateFaker extends BaseFaker<String> {
//
//    /**
//     * 车牌可用前缀字符 包括省和其他
//     */
//    private static final String STR_PLATE_LETTER_PREFIX = "京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领";
//
//    /**
//     * 车牌可用字符
//     */
//    private static final String STR_PLATE_LETTER = "ABCDEFGHJKLMNPQRSTUVWXYZ0123456789";
//
//    /**
//     * 车牌可用字母 末尾字符
//     */
//    private static final String STR_PLATE_LETTER_LAST = "ABCDEFGHJKLMNPQRSTUVWXYZ0123456789挂学警港澳使领";
//
//    /**
//     * 唯一实例
//     */
//    private static LicencePlateFaker instance = new LicencePlateFaker();
//
//    /**
//     * 获取唯一实例
//     *
//     * @return 实例
//     */
//    public static LicencePlateFaker getInstance() {
//        return instance;
//    }
//
//    /**
//     * 返回新的实例
//     *
//     * @return 实例
//     */
//    public LicencePlateFaker newInstance() {
//        instance = new LicencePlateFaker();
//        return instance;
//    }
//
//    /**
//     * 车牌分隔字符串
//     */
//    private String strSplit;
//
//    /**
//     * 省 枚举
//     */
//    @Getter
//    private ProvinceEnum[] provinceEnums;
//
//    /**
//     * 车牌省简称 数组
//     */
//    private String[] strsAbbreviation;
//
//    /**
//     * 注入车牌省枚举
//     *
//     * @param strPlit       车牌分隔字符串
//     * @param provinceEnums 省枚举数组
//     * @return {@link LicencePlateFaker}
//     */
//    public LicencePlateFaker province(String strPlit, ProvinceEnum... provinceEnums) {
//        this.provinceEnums = provinceEnums;
//        this.strSplit = strPlit;
//        return this;
//    }
//
//    /**
//     * 注入车牌省枚举
//     *
//     * @param provinceEnums 省枚举数组
//     * @return {@link LicencePlateFaker}
//     */
//    public LicencePlateFaker province(ProvinceEnum... provinceEnums) {
//        return province(null, provinceEnums);
//    }
//
//    @Override
//    protected void initialize() {
//        // 判断省枚举数组非空
//        if (ArrayUtil.isNotEmpty(provinceEnums)) {
//            // 车牌省简称数组
//            strsAbbreviation = Arrays.stream(provinceEnums).map(ProvinceEnum::getAbbreviation).toArray(String[]::new);
//            SB_PARAMETERS_LOG.append(ArrayUtil.toString(Arrays.stream(provinceEnums).map(ProvinceEnum::getAbbreviation).toArray(String[]::new)));
//        } else {
//            SB_PARAMETERS_LOG.append("[所有（包括“使”“领”等特殊车牌）]");
//        }
//
//        // 如果分隔符为空，则默认为 "·"
//        if (StrUtil.isBlank(strSplit)) {
//            strSplit = "·";
//        }
//
//        printParametersLog();
//    }
//
//    @Override
//    protected String getModel() {
//        return (ArrayUtil.isNotEmpty(strsAbbreviation) ? RandomUtil.randomEle(strsAbbreviation) : RandomUtil.randomString(STR_PLATE_LETTER_PREFIX, 1))
//                + RandomUtil.randomString(RandomUtil.BASE_CHAR, 1).toUpperCase()
//                + strSplit
//                + RandomUtil.randomString(STR_PLATE_LETTER, 4).toUpperCase()
//                + RandomUtil.randomString(STR_PLATE_LETTER_LAST, 1).toUpperCase();
//    }
//}
